package model;

import java.io.Serializable;

/**
 * Classe che incapsula e modella le informazioni associate ad un post-it. In particolare
 * sono stati implementati metodi per operare su info legate ai post-it quali 
 * il nome sintetico dello stesso, l'autore, la data di segnalazione, la categoria di
 * appartenenza, la descrizione dettagliata, il numero di valutazioni e la valutazione 
 * degli altri utenti riferita all'autore. Inoltre viene mantenuta una corrispondenza tra
 * i post-it e i punti d'interesse segnalati su mappa.
 * 
 * @author Gruppo Capo, De Notaris, Pastore e Vento
 * @since Luglio 2011
 */
public class PostIt implements Serializable {

	private static final long serialVersionUID = 1L;
	private int id;
	private int waypoint;
	private String name;
	private String description;
	private String cathegory;
	private String author;
	private String segnalationDate;
	private float ranking;
	private int valutationsNumber;

	/**
	 * Costruttore della classe che riceve in ingresso tutti i parametri che servono 
	 * per istanziare un nuovo post-it.
	 * @param postItId identificativo del post-it
	 * @param waypoint punto d'interesse al quale è associato il post-it
	 * @param name nome sintetico del post-it
	 * @param desc descrizione lunga del post-ir
	 * @param cat categoria alla quale appartiene il post-it
	 * @param author autore del post-it
	 * @param sd data di segnalazione
	 */
	public PostIt(int postItId,int waypoint, String name, String desc,String cat, String author,String sd) {
		super();
		this.id=postItId;
		this.waypoint = waypoint;
		this.name = name;
		this.description = desc;
		this.cathegory = cat;
		this.author=author;
		this.segnalationDate = sd;
	}

	/**
	 * Costruttore che imposta gli attributi ai valori di default. In particolare
	 * l'identificativo e il punto d'interesse associato sarà -1 e le stringhe 
	 * saranno vuote.
	 */
	public PostIt() {
		super();
		this.id=-1;
		this.waypoint = -1;
		this.name = "";
		this.description = "";
		this.cathegory = "";
		this.author="";
		this.segnalationDate = "";
	}
	
	/**
	 * Metodo che restituisce l'identificativo del post-it
	 * 
	 * @return int id identificativo univoco post-it
	 */
	public int getId() {
		return id;
	}

	/**
	 * Metodo che imposta l'identificativo del post-it a quello passato in input
	 * 
	 * @param id int identificativo del post-it
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * Metodo che restituisce il punto d'interesse al quale il post-it è associato
	 * 
	 * @return int waypoint punto d'interesse su mappa
	 */
	public int getWaypoint() {
		return waypoint;
	}

	/**
	 * Metodo che imposta il punto d'interesse a cui sarà associato il post-it a quello 
	 * passato in input
	 * 
	 * @param waypoint int identificativo del punto a cui sarà associato il post-it
	 */
	public void setWaypoint(int waypoint) {
		this.waypoint = waypoint;
	}

	/**
	 * Metodo che restituisce il nome del post-it
	 * 
	 * @return String nome post-it
	 */
	public String getName() {
		return name;
	}
	
	/**
	 * Metodo che imposta il nome sintetico del post-it a quello passato in input
	 * 
	 * @param name String nome del post-it
	 */
	public void setName(String name){
		this.name=name;
	}
	
	/**
	 * Metodo che restituisce la descrizione dettagliata riferita al post-it
	 * 
	 * @return String descrizione dettagliata del post-it
	 */
	public String getDescription() {
		return description;
	}

	/**
	 * Metodo che imposta la descrizione dettagliata riferita al post-it
	 * 
	 * @param description String descrizione dettagliata del post-it
	 */
	public void setDescription(String description) {
		this.description = description;
	}

	/**
	 * Metodo che restituisce la categoria alla quale appartiene il post-it
	 * 
	 * @return String categoria post-it
	 */
	public String getCathegory() {
		return cathegory;
	}

	/**
	 * Metodo che imposta la categoria alla quale apparterrà il post-it
	 * 
	 * @param cathegory String categoria del post-it
	 */
	public void setCathegory(String cathegory) {
		this.cathegory = cathegory;
	}

	/**
	 * Metodo che restituisce il nome dell'utente che ha editato il post-it
	 * 
	 * @return String autore post-it
	 */
	public String getAuthor() {
		return author;
	}

	/**
	 * Metodo che imposta l' autore del post-it
	 * 
	 * @param author String username dell'autore del post-it
	 */
	public void setAuthor(String author) {
		this.author = author;
	}

	/**
	 * Metodo che restituisce la data di segnalazione del post-it
	 * 
	 * @return String data di segnalazione del post-it
	 */
	public String getSegnalationDate() {
		return segnalationDate;
	}

	/**
	 * Metodo che imposta la data di segnalazione del post-it
	 * 
	 * @param sd String data di segnalazione del post-it
	 */
	public void setSegnalationDate(String sd) {
		this.segnalationDate = sd;
	}
	
	/**
	 * Metodo che restituisce il ranking dell'autore del post-it
	 * 
	 * @return float valutazione associata all'autore del post-it
	 */
	public float getRanking() {
		return ranking;
	}

	/**
	 * Metodo che imposta la valutazione riferita all'autore del post-it
	 * 
	 * @param ranking float valutazione da impostare 
	 */
	public void setRanking(float ranking) {
		this.ranking = ranking;
	}
	
	/**
	 * Metodo che restituisce il numero di valutazioni fatte rispetto al post-it
	 * 
	 * @return int numero valutazioni post-it
	 */
	public int getValutationsNumber() {
		return valutationsNumber;
	}

	/**
	 * Metodo che imposta il numero di valutazioni riferito al post-it
	 * 
	 * @param in valutationsNumber numero di valutazioni fatte al post-it
	 */
	public void setValutationsNumber(int valutationsNumber) {
		this.valutationsNumber = valutationsNumber;
	}

	/**
	 * Metodo che restituisce come stringa le informazioni associate al post-it.
	 * 
	 * @return informazioni associate al post-it 
	 */
	@Override
    public String toString(){
    	return "id:"+getId()+" waypoint:"+getWaypoint()+" name:"+getName()+" description:"+getDescription()+" cathegory:"+getCathegory()+" author:"+getAuthor()+" segnalationDate:"+getSegnalationDate()+" valutationsNumber:"+getValutationsNumber();
    }
}
